package com.demo.java.OD301_350.OD322;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【AI 识别面板(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146118329
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine()); // 输入灯的数量

        // 存储灯的信息，包括编号和位置
        int[][] lights = new int[n][4];
        for (int i = 0; i < n; i++) {
            // 读取每行输入数据，获取编号和四个坐标
            String[] input = scanner.nextLine().split(" ");
            int id = Integer.parseInt(input[0]);  // 灯的编号
            int x1 = Integer.parseInt(input[1]); // 第一个坐标x1
            int y1 = Integer.parseInt(input[2]); // 第一个坐标y1
            int x2 = Integer.parseInt(input[3]); // 第二个坐标x2
            int y2 = Integer.parseInt(input[4]); // 第二个坐标y2
            // 计算灯的中心点坐标并存入lights数组
            lights[i] = new int[]{id, (x1 + x2) / 2, (y1 + y2) / 2, (x2 - x1) / 2};
        }

        // 按照纵坐标（中心点的y坐标）升序排序，如果纵坐标相同则按横坐标（中心点的x坐标）升序排序
        Arrays.sort(lights, Comparator.comparingInt(a -> a[2]));

        StringBuilder result = new StringBuilder();
        int rowStartIndex = 0; // 用于追踪同一行的起始索引
        for (int i = 1; i < n; i++) {
            // 如果当前灯和上一个灯的纵坐标相差大于当前行最大间距，则可以排序该行的灯
            if (lights[i][2] - lights[rowStartIndex][2] > lights[rowStartIndex][3]) {
                Arrays.sort(lights, rowStartIndex, i, Comparator.comparingInt(a -> a[1])); // 在当前行内按横坐标排序
                for (int j = rowStartIndex; j < i; j++) {
                    result.append(lights[j][0]).append(" "); // 追加灯的编号
                }
                rowStartIndex = i; // 更新起始索引
            }
        }

        // 对最后一行灯进行排序并输出结果
        Arrays.sort(lights, rowStartIndex, n, Comparator.comparingInt(a -> a[1]));
        for (int i = rowStartIndex; i < n; i++) {
            result.append(lights[i][0]).append(" ");
        }

        System.out.println(result.toString().trim()); // 输出排序后的灯的编号
    }
}